﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Data.SqlClient;
using System.Data;
using System.Text;
using DAL;
using System.Transactions;


namespace BOL
{
    public class EtapaBL
    {
        public int AddEtapa(string descripcion,
                            int idProyecto,
                            int idTipoProyecto,
                            string nombre,
                        
                            decimal area,
                            int plazoEntrega,
                            DateTime fechaFin,
                            string comentario,
                            bool bitActivo
                            )
        {

            using (TransactionScope ts = new TransactionScope())
            {

                dbGestionDataContext _db =
                    new dbGestionDataContext(Parametros.strConnString);

                //datos de la empresa y empleado
                int idUsuarioCre = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());
               
                Etapa db = new Etapa();
                db.SetAdd(_db, descripcion, idProyecto, idTipoProyecto, nombre,
                                             area, plazoEntrega, fechaFin, comentario, bitActivo, idUsuarioCre);

                _db.Etapas.InsertOnSubmit(db);
                _db.SubmitChanges();
                ts.Complete();
                return db.idInternal;
            }
        }



        public bool updateEtapa(int idInternal,
                            string descripcion,
                            int idProyecto,
                            int idTipoProyecto,
                            string nombre,
                           
                            decimal area,
                            int plazoEntrega,
                            DateTime fechaFin,
                            string comentario,
                            bool bitActivo)
        {
            bool result = false;
            using (TransactionScope ts = new TransactionScope())
            {

                dbGestionDataContext _db =
                    new dbGestionDataContext(Parametros.strConnString);
                //datos de la empresa y empleado
                int idUsuarioCre = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());
              


                Etapa Etapa = _db.Etapas.Single(p => p.idInternal == idInternal);


                Etapa.Setupdate( descripcion, idProyecto, idTipoProyecto, nombre,
                                 area, plazoEntrega, fechaFin, comentario, bitActivo, idUsuarioCre);

                _db.SubmitChanges();
                ts.Complete();
                result = true;
            }
            return result;
        }



        public bool delete(int idInternal)
        {

            bool result = false;
            using (TransactionScope ts = new TransactionScope())
            {

                dbGestionDataContext _db;
                _db = new dbGestionDataContext(Parametros.strConnString);

                var Etapa = _db.Etapas.Single(p => p.idInternal == idInternal);

                if (Etapa.UILocalizacions.Count > 0)
                {
                    throw new Exception("existe Localizaciones, Elimine localizaciones antes de eliminar la Etapa ");
                }

                _db.Etapas.DeleteOnSubmit(Etapa);
                _db.SubmitChanges();
                ts.Complete();
                result = true;
            }
            return result;

        }


        public void AddFinanciamiento(List<int> ListaFinanciamiento, int idEtapa)
        {
            using (TransactionScope ts = new TransactionScope())
            {

                dbGestionDataContext _db =
                    new dbGestionDataContext(Parametros.strConnString);

                //datos de la empresa y empleado
                int idUsuarioCre = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());
                int idEmpresa = (int)System.Web.HttpContext.Current.Session["login.Empresa.idEmpresa"];


                foreach (var item in ListaFinanciamiento)
                {
                    CuentaProyectoItem db = new CuentaProyectoItem();

                    db.idEtapa = idEtapa;
                    db.idCuentaProyecto = item;
                    _db.CuentaProyectoItems.InsertOnSubmit(db);
                }

                _db.SubmitChanges();
                ts.Complete();

            }





        }
        public void quitarFinanciamiento(List<int> ListaFinanciamiento, int idEtapa)
        {
            using (TransactionScope ts = new TransactionScope())
            {

                dbGestionDataContext _db =
                    new dbGestionDataContext(Parametros.strConnString);

                //datos de la empresa y empleado
                int idUsuarioCre = int.Parse(System.Web.HttpContext.Current.Session["idEmpleado"].ToString());
                int idEmpresa = (int)System.Web.HttpContext.Current.Session["login.Empresa.idEmpresa"];


                foreach (var item in ListaFinanciamiento)
                {
                    CuentaProyectoItem db = _db.CuentaProyectoItems.Single(p=>p.idEtapa==idEtapa & p.idCuentaProyecto==item);

                    _db.CuentaProyectoItems.DeleteOnSubmit(db);
                }

                _db.SubmitChanges();
                ts.Complete();

            }





        }
    }
}
